export default {
  // 用数组保存所有注册的通知 (包含名称、要执行的代码、观察者)
  notifications: [],
  
  /**
   * 注册通知到通知中心
   * @param {String} name 注册名，建议写在专门的参数文件中
   * @param {Function} handler 对应的通知处理函数，接到通知后调用
   * @param {Object} observer 注册对象，通常为页面对象
   */
  addNotification(name, handler, observer) {
    // 将通知对象保存到数组中
    this.notifications.push({ name, handler, observer });
  },
  
  /**
   * 从通知中心移除通知
   * @param {String} name 已经注册了且要移除的通知名称
   * @param {Object} observer 移除的通知所在的对象
   */
  removeNotification(name, observer) {
    // 通过过滤函数将不需要移除的通知对象重新保存到数组中
    this.notifications = this.notifications.filter(notification =>
      notification.name !== name || notification.observer !== observer
    );
  },
  
  /**
   * 发送通知
   * @param {String} name 已经注册了的通知名称
   * @param {Object} data 携带的参数
   */
  postNotification(name, data) {
    // 遍历数组，找到对应名称的通知对象并执行对应的处理函数
    this.notifications.forEach(notification => {
      if (notification.name === name) {
        notification.handler.call(notification.observer, data);
      }
    });
  }
};
